#pragma once
#include "logger.hpp"

namespace mylog
{
    Logger::ptr GetLoger(const string &name)
    {
        return LoggerManager::GetInstance().GetLogger(name);
    }
    Logger::ptr GetRootLoger()
    {
        return LoggerManager::GetInstance().GetRootLogger();
    }
#define Debug(fmt, ...) Debug(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define Info(fmt, ...) Info(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define Warn(fmt, ...) Warn(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define Error(fmt, ...) Error(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define Fatal(fmt, ...) Fatal(__FILE__, __LINE__, fmt, ##__VA_ARGS__)

#define LOG_DEBUG(logger, fmt, ...) (logger)->Debug(fmt, ##__VA_ARGS__)
#define LOG_INFO(logger, fmt, ...) (logger)->Info(fmt, ##__VA_ARGS__)
#define LOG_WARN(logger, fmt, ...) (logger)->Warn(fmt, ##__VA_ARGS__)
#define LOG_ERROR(logger, fmt, ...) (logger)->Error(fmt, ##__VA_ARGS__)
#define LOG_FATAL(logger, fmt, ...) (logger)->Fatal(fmt, ##__VA_ARGS__)

#define LOGD(fmt, ...) LOG_DEBUG(mylog::GetRootLoger(), fmt, ##__VA_ARGS__)
#define LOGI(fmt, ...) LOG_INFO(mylog::GetRootLoger(), fmt, ##__VA_ARGS__)
#define LOGW(fmt, ...) LOG_WARN(mylog::GetRootLoger(), fmt, ##__VA_ARGS__)
#define LOGE(fmt, ...) LOG_ERROR(mylog::GetRootLoger(), fmt, ##__VA_ARGS__)
#define LOGF(fmt, ...) LOG_FATAL(mylog::GetRootLoger(), fmt, ##__VA_ARGS__)
}